package org.vison.wonfu.framework.dao;

import java.lang.annotation.Retention;
import java.lang.annotation.Target;

import static java.lang.annotation.ElementType.*;
import static java.lang.annotation.RetentionPolicy.RUNTIME;

@Target({TYPE, FIELD, METHOD})
@Retention(RUNTIME)
public @interface Column {
    /**
     * 数据库列名（默认使用字段名）
     */
    String name() default "";

    /**
     * 字段类型（如VARCHAR、INT、DATETIME等）
     */
    ColumnType type() default ColumnType.NONE;
    /**
     * 数值精度（总位数，适用于DECIMAL等类型）
     */
    int precision() default -1;
     /**
     * 小数位数（适用于DECIMAL等类型）
     */
    int scale() default -1;

    /**
     * 长度（适用于字符串类型）
     */
    int length() default -1;

    /**
     * 是否允许为NULL
     */
    boolean nullable() default true;

    /**
     * 是否唯一约束
     */
    boolean unique() default false;

    /**
     * 默认值（直接写SQL中的默认值，如'NORMAL'、0、CURRENT_TIMESTAMP）
     */
    String defaultValue() default "";

    /**
     * 字段注释
     */
    String comment();

    /**
     * 是否自增（仅适用于主键）
     */
    boolean autoIncrement() default false;

    /** 时间字段特殊默认值（与defaultValue互斥） */
    TimeDefault timeDefault() default TimeDefault.NONE;

    boolean primaryKey() default false;


    /**
     * 时间字段默认值枚举
     * 对应MySQL的时间特殊默认值语法
     */
    enum TimeDefault {
        /** 不使用时间默认值 */
        NONE,
        /** DEFAULT CURRENT_TIMESTAMP */
        CURRENT_TIMESTAMP,
        /** DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP */
        CURRENT_TIMESTAMP_ON_UPDATE
    }

    enum ColumnType {
        VARCHAR,
        INT,
        DATETIME,
        TIMESTAMP,
        DECIMAL,
        TEXT,
        JSON,
        BLOB,
        ENUM,
        SET,
        NONE
    }
}